package vue.eleve;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

import metier.Eleve;
import metier.Stage;
import vue.commun.JPanRechercherEleve;
import configuration.Constante;
import configuration.MessageAppli;
import ctr.commun.CommunGest;
import ctr.eleve.GestModifierEleve;

public class JPanModifierEleve extends RechercherEleve{
	
	private static final long serialVersionUID = -8258905260255616984L;
	private JTextField saisiNomEleve, saisiPrenomEleve;
	private JTextField saisiRechercheNomEleve, saisiRecherchePrenomEleve;
	private JComboBox saisiGradeEleve;
	private JComboBox saisiStage, saisiRechercheStage;
	private JTextField saisiDateNaissanceEleve;
	private String titre;
	private int idEleve;

	
	public JPanModifierEleve(JPanModifierEleve jPanModifierEleve) {
		this.eleve = jPanModifierEleve.getEleve();
		afficher();
	}
	
	public JPanModifierEleve(String titre) {
		this.titre = titre;
		afficher();
	}
	
	/**
	 * Constructeur de base.
	 * @param titre
	 */
	public void afficher() {
		

		// Instanciation pour recuperer les objets en bases.
		// Oblige a passer par la couche controle pour acceder aux metiers.
		CommunGest communGest = new CommunGest();
		
		// Recuperation de la liste des stages.
		ArrayList<Stage> lStage = communGest.getListeStage();
		if ( !lStage.isEmpty()){
			// Creation du pannel de saisie pour la recherche
			
			JPanRechercherEleve jPanRechercherEleve = new JPanRechercherEleve(this);
			
			// Ajout du panel de recherche dans le panel Modifier eleve
			this.setLayout(new GridLayout(2,1));
			this.add(jPanRechercherEleve);
			
			// Creation du panel de modification
			JPanel modif = new JPanel();
			
			// Panel de saisi du panel de modif
			JPanel panelSaisi = new JPanel();
			panelSaisi.setLayout(new GridLayout(5,1,5,5));
			
			
			// Permet de renseigner les champs par les valeurs precedement saisies si existante.
			saisiNomEleve = new JTextField(15);	
			saisiPrenomEleve = new JTextField(15);
			saisiGradeEleve = new JComboBox(communGest.getListeGrade().toArray());
			saisiDateNaissanceEleve = new JTextField(10);
			saisiStage = new JComboBox(lStage.toArray());
			
			Eleve eleve = getEleve();
			if ( eleve != null ){
				SimpleDateFormat formatDateJour = new SimpleDateFormat(Constante.FORMAT_DATE_SHORT.toString());
				
				saisiNomEleve.setText(eleve.getNomEleve());
				saisiPrenomEleve.setText(eleve.getPrenom());
				saisiGradeEleve.setSelectedItem(communGest.getGrade(eleve.getIdGrade()));
				saisiDateNaissanceEleve.setText(formatDateJour.format(eleve.getDateNaissance()));
				saisiStage.setSelectedItem(communGest.getStage(eleve.getIdStage()));
			}
			
			// Ajout des composants au panel de modif
			panelSaisi.add(saisiNomEleve);
			panelSaisi.add(saisiPrenomEleve);
			panelSaisi.add(saisiGradeEleve);
			panelSaisi.add(saisiDateNaissanceEleve);
			panelSaisi.add(saisiStage);
			
			// Panel du label modifier
			JPanel panelLabel = new JPanel();
			panelLabel.setLayout(new GridLayout(5,1,5,5));
			panelLabel.add(new JLabel("Nom : "));
			panelLabel.add(new JLabel("Prenom : "));
			panelLabel.add(new JLabel("Grade : "));
			panelLabel.add(new JLabel("Date de Naissance : "));
			panelLabel.add(new JLabel("Stage : "));
			
			// Creation du panel bouton modifier
			JPanel panelBouton = new JPanel();
			JButton jButtonAjoutEleve = new JButton("Modifier");
			jButtonAjoutEleve.setName(Constante.BOUTON_ELEVE_AJOUT);
			jButtonAjoutEleve.addActionListener(new GestModifierEleve(this));
			
			// Ajout de ses composants
			panelBouton.add(jButtonAjoutEleve);
			
			// Panel global
			modif.setBorder(new TitledBorder(titre));
			modif.setLayout(new GridBagLayout());
			
			// Agencements de composants
			GridBagConstraints gbc_modi = new GridBagConstraints();
			gbc_modi.weightx = 0;
			gbc_modi.weighty = 0; 
			gbc_modi.gridwidth = 1;
			gbc_modi.gridheight = 1;
			
			gbc_modi.gridx = -1;
			gbc_modi.gridy = 0;
			gbc_modi.fill = GridBagConstraints.VERTICAL;
			modif.add(panelLabel,gbc_modi);
			
			gbc_modi.gridx = 1;
			gbc_modi.gridy = 0;
			gbc_modi.fill = GridBagConstraints.VERTICAL;
			modif.add(panelSaisi,gbc_modi);
			
			gbc_modi.gridx = 0;
			gbc_modi.gridy = 2;
			gbc_modi.gridwidth = 2;
			gbc_modi.gridheight = 2;
			gbc_modi.fill = GridBagConstraints.CENTER ;
			modif.add(panelBouton, gbc_modi);
			
			// Ajout du panel de modification.
			this.add(modif);
		}else{
			JOptionPane.showMessageDialog(this, MessageAppli.MSG_STAGE_AUCUN_STAGE + ", ajout d'eleve impossible.", MessageAppli.MSG_ERREUR_TITRE, JOptionPane.WARNING_MESSAGE);
		}
	
	
	}
	
	public JTextField getSaisiNomEleve() {
		return saisiNomEleve;
	}

	public JTextField getSaisiPrenomEleve() {
		return saisiPrenomEleve;
	}

	public JComboBox getSaisiGradeEleve() {
		return saisiGradeEleve;
	}

	public JTextField getSaisiDateNaissanceEleve() {
		return saisiDateNaissanceEleve;
	}

	public JComboBox getSaisiStage() {
		return saisiStage;
	}

	public JTextField getSaisiRechercheNomEleve() {
		return saisiRechercheNomEleve;
	}

	public JTextField getSaisiRecherchePrenomEleve() {
		return saisiRecherchePrenomEleve;
	}

	public JComboBox getSaisiRechercheStage() {
		return saisiRechercheStage;
	}

	public String getTitre() {
		return titre;
	}

	public int getIdEleve() {
		return idEleve;
	}

	public void setIdEleve(int idEleve) {
		this.idEleve = idEleve;
	}

	@Override
	public Eleve getEleve() {
		return this.eleve;
	}

	@Override
	public void setEleve(Eleve eleve) {
		this.eleve = eleve;
		
	}
	
	@Override
	public JPanel init(){
		return new JPanModifierEleve(this);
	}
}
